package model;

import bledy.RezerwacjaException;
import datamodel.Kryteria;
import datamodel.Rezerwacja;



// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
import datamodel.ZbiorRezerwacji;
import java.util.ArrayList;
import java.util.List;
// #[regen=yes,id=DCE.17863AF7-4F12-D98C-50DB-F24E29C362FD]
import java.util.Arrays;
// </editor-fold> 
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class RezerwacjaObserwer {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.34BA86A5-6D2E-5A55-7B98-D88A4580F1FE]
    // </editor-fold> 
    private static RezerwacjaObserwer uniqueInstance;
    private ArrayList<Sluchacz> sluchacze = new ArrayList<Sluchacz>();

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CC8FFB86-A006-6CD1-8C1A-F4F998047997]
    // </editor-fold> 
    private RezerwacjaObserwer() {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.552E0262-B4C0-243D-D167-87D744DA6557]
    // </editor-fold> 
    public static RezerwacjaObserwer instance() {
        if (uniqueInstance == null) {
            uniqueInstance = new RezerwacjaObserwer();
        }
        return uniqueInstance;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.005F9AED-EF6B-F9DA-3307-5C47880A3F67]
    // </editor-fold> 
    public void zarezerwujSale(ZbiorRezerwacji zbiorRezerwacji) throws RezerwacjaException {
        
        boolean error = false;
        
        try {
            
            ParserDoWebService.instance().zarezerwujSale(zbiorRezerwacji);
            
        } catch (RezerwacjaException ex) {
            error = true;
            Logger.getLogger(RezerwacjaObserwer.class.getName()).log(Level.SEVERE, null, ex);
            throw ex;
        }

        if (!error) {
            for (Iterator<Sluchacz> it = sluchacze.iterator(); it.hasNext();) {
                Sluchacz sluchacz = it.next();
                sluchacz.reagujNaZdarzenieRezerwacja("zarezerwowano", zbiorRezerwacji);
            }
        }

    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A6C9D5D8-39BF-2A26-1808-AFEF9EF63A3A]
    // </editor-fold> 
    public void usunRezerwacje(Rezerwacja rezerwacja) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B6C5C2CC-7B5D-6492-D126-288B1DDFA06C]
    // </editor-fold> 
    public void wyswietlZajeteSale(Kryteria kryteria) {
        List<Rezerwacja> wyniki = ParserDoWebService.instance().podajOblozenieSal(kryteria);
        for (Sluchacz sluchacz : sluchacze) {
           // sluchacz.reagujNaZdarzenieRezerwacja("Zajete sale", wyniki);
        }
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CA7C18BA-0D06-C7CD-EF9A-8AFEA29B03F1]
    // </editor-fold> 
    public void pokazWolneSale(Kryteria kryteria) {
        FiltrSal filtrSal = new FiltrSal();
        List<Rezerwacja> wyniki = filtrSal.podajWolneSale(kryteria);
        for (Sluchacz sluchacz : sluchacze) {
          //  sluchacz.reagujNaZdarzenieRezerwacja("Wolne sale", wyniki);
        }
    }

    public void dodajSluchacza(Sluchacz sluchacz) {
        sluchacze.add(sluchacz);
    }

    public void dodajSluchaczy(Sluchacz[] sluchacze) {
        this.sluchacze.addAll(Arrays.asList(sluchacze));
    }

    public void dodajSluchaczy(List<? extends Sluchacz> sluchacze) {
        this.sluchacze.addAll(sluchacze);
    }
}

